home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Texteditors / Origami / Sources / doc / tok2sed.awk < prev    next >
Text File  |  1996-09-26  |  6KB  |  195 lines

  1. BEGIN {
  2.     #{{{}}}
  3. #    {{{  normal replacements
  4.     max_command=32
  5.     BASENAME="name.sed"
  6.     TMPNAME="/tmp/"BASENAME".tmp."
  7. #    }}}
  8. #    {{{  paths
  9.     rc   = ""
  10.     help = ""
  11.     msg  = ""
  12.     bold = "\\fB"
  13.     ital = "\\fI"
  14.     norm = "\\fP"
  15.     file_limit = ",\n.br\n"
  16.     contents = ".br\n%s -\n.br\n       files containing the %s\n"
  17.     base = "origami"
  18.     nrc = 0
  19. #    }}}
  20. }
  21. #{{{  path strings
  22. /^(ORIGAMI_RC|KBD)_PATH_STRING / {
  23.     replace[$1]=$2
  24.     next
  25. }
  26. /^ORI_RC_PATH_MANTEXT / {
  27.     for (i=1;i<length($2);i++) {
  28. #        {{{  maybe add limiter
  29.         if (nrc>0) {
  30.             rc   = rc   file_limit
  31.             help = help file_limit
  32.             msg  = msg  file_limit
  33.         }
  34. #        }}}
  35.         nrc = nrc + 1
  36. #        {{{  add font switch to bold
  37.         rc = rc bold
  38.         help = help bold
  39.         msg = msg bold
  40. #        }}}
  41. #        {{{  append-path-name
  42.         while ((i<=length($2)) && (substr($2,i,1)!=":")) {
  43.             rc   = rc   substr($2,i,1)
  44.             help = help substr($2,i,1)
  45.             msg  = msg  substr($2,i,1)
  46.             i = i+1
  47.         }
  48. #        }}}
  49. #        {{{  add font-switches, includeing rc,..
  50.         rc   = rc   "/." norm ital base norm bold "rc"   norm
  51.         help = help "/." norm ital base norm bold "help" norm
  52.         msg  = msg  "/." norm ital base norm bold "msg"  norm
  53. #        }}}
  54.     }
  55.     next
  56. }
  57. #}}}
  58. #{{{  simple replace-defines
  59. $1~/^[KO]_/ && $3~/^COM[_ICAP]*$/ && $4!="NONE" {
  60.     replace[$1]=$4
  61.     next
  62. }
  63. substr($1,1,1)!="#" && $3=="OPP-KEY" {
  64.     replace[$1]=$2
  65.     next
  66. }
  67. substr($1,1,1)!="#" && $3=="OCL-KEY" {
  68.     replace[$1]=$2
  69.     next
  70. }
  71. $1=="#define" {
  72.     replace[$2]=substr($3,2,length($3)-2)
  73.     next
  74. }
  75. #}}}
  76. { next }
  77. END {
  78.    replace["ORI_RC_PATH_MANTEXT"]=".SH FILES\n"sprintf(contents,rc,"bindings and macros")sprintf(contents,help,"help")sprintf(contents,msg,"print formats")sprintf(".PP\n%s\n",ital base norm " can be replaced with command line option (" bold "\-k" norm ") or name of the executable.")
  79. #   {{{  print header of shell script for calling sed
  80.    printf("#! /bin/sh\n") >BASENAME
  81.    print("#") >BASENAME
  82.    print("# script generated automatically, using sed-cmd-file "TMPNAME"[s01]") >BASENAME
  83.    print("#") >BASENAME
  84.    print("") >BASENAME
  85.    printf("trap %c/bin/rm -f "TMPNAME"?%c 0 1 2 3 15\n",34,34) >BASENAME
  86.    print("") >BASENAME
  87. #   }}}
  88.    destfile=TMPNAME"1"
  89.    sourcefile=""
  90.    mod=0
  91.    sedname=TMPNAME"s"
  92.    lastout=destfile
  93. #   {{{  print all replace statements
  94. #   {{{  print language replace statement
  95.    print("#{{{  sed-run `language tbl' ..") >BASENAME
  96.    print("cat lg.sed >"sedname) >BASENAME
  97.    print("cat >>"sedname" <<\\HERE") >BASENAME
  98.    n=max_command*3/4
  99. #   }}}
  100.    for ( s in replace ) {
  101. #      {{{  maybe switch command file
  102.       if (++n>max_command) {
  103.          print("HERE") >BASENAME
  104.          print("sed -f "sedname" "sourcefile" >"destfile) >BASENAME
  105.          print("#}}}") >BASENAME
  106.          print("#{{{  sed-run `"s"' ..") >BASENAME
  107.          print("cat >"sedname" <<\\HERE") >BASENAME
  108.          n=0
  109.          sourcefile="<"destfile
  110.          destfile=TMPNAME mod
  111.          mod=1-mod
  112.          lastout=destfile
  113.       }
  114. #      }}}
  115. #      {{{  get replacement string, handle some chars in a special way
  116.       for (do_replace="";replace[s]!="";) {
  117. #         {{{  .SH -> .SH
  118.          if (substr(replace[s],1,3)==".SH") {
  119.             do_replace=do_replace ".SH"
  120.             replace[s]=substr(replace[s],4)
  121.             continue
  122.          }
  123. #         }}}
  124. #         {{{  .br -> .br
  125.          if (substr(replace[s],1,3)==".br") {
  126.             do_replace=do_replace ".br"
  127.             replace[s]=substr(replace[s],4)
  128.             continue
  129.          }
  130. #         }}}
  131. #         {{{  \f([BIP]) -> \\f\1
  132.          if (substr(replace[s],1,3)=="\\fB" || substr(replace[s],1,3)=="\\fI" || substr(replace[s],1,3)=="\\fP" ) {
  133.             do_replace=do_replace "\\" substr(replace[s],1,3)
  134.             replace[s]=substr(replace[s],4)
  135.             continue
  136.          }
  137. #         }}}
  138. #         {{{  \n -> \ and \n
  139.          if (substr(replace[s],1,1)=="\n") {
  140.             do_replace=do_replace "\\\n"
  141.             replace[s]=substr(replace[s],2)
  142.             continue
  143.          }
  144. #         }}}
  145. #         {{{  \\ -> \ \ e
  146.          if (substr(replace[s],1,2)=="\\\\") {
  147.             do_replace=do_replace "\\\\e"
  148.             replace[s]=substr(replace[s],3)
  149.             continue
  150.          }
  151. #         }}}
  152. #         {{{  \ -> \ \ e
  153.          if (substr(replace[s],1,1)=="\\") {
  154.             do_replace=do_replace "\\\\e"
  155.             replace[s]=substr(replace[s],2)
  156.             continue
  157.          }
  158. #         }}}
  159. #         {{{  & -> \ &
  160.          if (substr(replace[s],1,1)=="&") {
  161.             do_replace=do_replace "\\&"
  162.             replace[s]=substr(replace[s],2)
  163.             continue
  164.          }
  165. #         }}}
  166. #         {{{  / -> \ /
  167.          if (substr(replace[s],1,1)=="/") {
  168.             do_replace=do_replace "\\/"
  169.             replace[s]=substr(replace[s],2)
  170.             continue
  171.          }
  172. #         }}}
  173. #         {{{  . -> \ & .
  174.          if (substr(replace[s],1,1)==".") {
  175.             do_replace=do_replace "\\\\\\&."
  176.             replace[s]=substr(replace[s],2)
  177.             continue
  178.          }
  179. #         }}}
  180. #         {{{  copy the original
  181.          do_replace=do_replace substr(replace[s],1,1)
  182.          replace[s]=substr(replace[s],2)
  183. #         }}}
  184.       }
  185. #      }}}
  186.       print("s/>>>"s"<<</"do_replace"/g") >BASENAME
  187.    }
  188.    print("HERE") >BASENAME
  189.    print("sed -f "sedname" "sourcefile" >"destfile) >BASENAME
  190.    print("#}}}") >BASENAME
  191. #   }}}
  192.    print("") >BASENAME
  193.    print("cat "lastout) >BASENAME
  194. }
  195.